export interface MethondRes<T> {
  methodName: string;
  reqIdx: string;
  rstCode: string;
  rstMsg: string;
  rstObj: T;
}

/**
 * 坐席事件返回数据
 * @example
 * // agentDn: "10313"
 * // agentHandle: "43935"
 * // agentId: "10313"
 * // agentStatus: "4"
 * // callId: ""
 * // currSkill: "10003"
 * // eventId: "0"
 * // eventName: "AgentEvent"
 * // originalAni: ""
 * // originalCallid: ""
 * // originalDnis: ""
 * // originatingParty: ""
 * // otherAttr: "0"
 * // otherParty: ""
 * // partyNum: "0"
 * // reason: "14"
 * // sessionId: "0"
 * // timestamp: "1609292113096313"
 */
export type AgentEventData = {
  /**
   * 座席号码
   */
  agentDn: string;
  agentHandle: string;
  /**
   * 坐席工号
   */
  agentId: string;
  /**
   * 座席状态，参数座席状态
   */
  agentStatus: string;
  /**
   * 呼叫ID
   */
  callId: string;
  currSkill: string;
  /**
   * 事件ID
   */
  eventId: string;
  eventName: "AgentEvent";
  originalAni: string;
  /**
   * 发起呼叫ID
   */
  originalCallid: string;
  originalDnis: string;
  originatingParty: string;
  /**
   * 对方属性，0:未知 1:内线 2:外线
   */
  otherAttr: string;
  /**
   * 对方
   */
  otherParty: string;
  /**
   * 呼叫共有几方参与
   */
  partyNum: string;
  reason: string;
  /**
   * 会话ID
   */
  sessionId: string;
  timestamp: string;
};

export type OtherEventData = {
  eventName: "OtherEvent";
  /**
   * 	坐席工号
   */
  agentId: string;
  /**
   * 其他事件类型
   * 0: IMS断开连接
   * 1: IMS主备倒换
   * 2: 本方未应答
   * 3: IMS鉴权状态
   * 4: ACD断开连接
   * 5: ACD主备倒换
   * 6: 网络或者ACD服务异常
   * 7: ACD重签成功
   * 8: ACD重签失败
   */
  eventType: string;
  /**
   * 座席号码
   */
  agentDn: string;
  /**
   * 呼叫ID
   */
  callId: string;
  /**
   * 会话ID
   */
  sessionId: string;
  /**
   * 	原始主叫
   */
  originalAni: string;
  /**
   * 原始被叫
   */
  originalDnis: string;
  /**
   * 事件戳，单位微妙
   */
  timestamp: string;
  /**
   * 鉴权状态，当eventType=3的时候有效
   */
  data: string;
};

/**
 * 登录返回类型
 */
export interface LoginRes {
  /**
   * 连接句柄
   */
  handle: string;
  /**
   * 坐席工号
   */
  agentId: string;
  /**
   * 座席使用的电话号码
   */
  agentDn: string;

  /**
   * 是否自动应答
   */
  autoAnswer: StateType;
  /**
   * 是否强制迁入
   */
  fcSignin: StateType;
  /**
   * 技能组
   */
  skill: string;
  skillLevel: "1";
  skillName: "";
  /**
   * 坐席名称
   */
  comAgentName: string;
  comAgentPhone: string;
  corpNo: string;
  /**
   * 过期时间
   */
  expireDate: string;

  staffNo: "";
  /**
   * 挂断后状态
   * 0：自动示闲
   * 1：自动示忙
   */
  statusChangetype: StateType;
}

/**
 * 电话接通后收到的相关数据
 * @example
 * agentDn: "10316"
 * agentHandle: "44241"
 * agentId: "10316"
 * callId: "1609304264610630"
 * eventName: "MediaEvent"
 * eventType: "1"
 * filename: "20201230/10316/10316_10316_0017765859021_10003_1609304264610630_47104202424025720_20201230125754.wav"
 * otherParty: "0017765859021"
 * reason: "0"
 * sessionId: "47104202424025720"
 * state: "2"
 * timestamp: "1609304274665609"
 */
export type MediaEventData = {
  /**
   * 座席号码
   */
  agentDn: string;
  /**
   * 坐席句柄
   */
  agentHandle: string;
  /**
   * 坐席工号
   */
  agentId: string;
  /**
   * 呼叫ID
   */
  callId: string;
  eventName: "MediaEvent";
  /**
   * 事件类型
   * 媒体事件类型
   * 0: 未知
   * 1: 表明硬件层正式开始录音
   * 3: 表明硬件层录音结束
   */
  eventType: string;
  /**
   * 录音文件名
   */
  filename: string;
  /**
   * 通话方
   */
  otherParty: string;
  /**
   * 原因
   * 0: 未知
   * 1: 媒体其他操作
   * 2: 其他
   */
  reason: string;
  sessionId: string;
  /**
   * 媒体状态
   * 0: 未知
   * 1: 空闲
   * 2: 录音
   */
  state: string;
  timestamp: string;
};

type StateType = 0 | 1;
